﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using produccion.forms;
using System.Data;
using System.Collections.ObjectModel;

namespace produccion.clases
{
    public class CLSENCSAL
    {
        String StrConsulta;
        MDOgeneral mod = new MDOgeneral();
        string tipsal_esa, hojnro_esa, obssal_esa, dessal_esa, nroordp_esa, estado_esa;
        DateTime fecsal_esa;

        public string TIPSAL_ESA
        {
            get { return tipsal_esa; }
            set { tipsal_esa = value; }
        }
        public string HOJNRO_ESA
        {
            get { return hojnro_esa; }
            set { hojnro_esa = value; }
        }
        public DateTime FECSAL_ESA
        {
            get { return fecsal_esa; }
            set { fecsal_esa = value; }
        }
        public string OBSSAL_ESA
        {
            get { return obssal_esa; }
            set { obssal_esa = value; }
        }
        public string DESSAL_ESA
        {
            get { return dessal_esa; }
            set { dessal_esa = value; }
        }
        public string NROORDP_ESA
        {
            get { return nroordp_esa; }
            set { nroordp_esa = value; }
        }
        public string ESTADO_ESA
        {
            get { return estado_esa; }
            set { estado_esa = value; }
        }
        private Boolean _EXISTE = false;
        public Boolean EXISTE {
            get { return _EXISTE; }
            set { _EXISTE = value;
            }
        }

        public Boolean ExisteMP(string Codigo, string Color)
        {
            try
            {
                string query = "select codmat_mtp, codcol_mtp from maemtp where codmat_mtp='" + Codigo + "' and codcol_mtp='" + Color + "'";
                if (mod.consulta(query).Rows.Count > 0)
                {
                    return true;
                }
                return false;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public string Consecutivo(string Tipo)
        {
            try
            {
                string query="";
                if (Tipo == "O")
                {
                    query = "select nom_con from controlp where id_con='NRO' and cod_con='SO'";
                }
                if (Tipo == "P")
                {
                    query = "select nom_con from controlp where id_con='NRO' and cod_con='SP'";
                }
                if (Tipo == "D")
                {
                    query = "select nom_con from controlp where id_con='NRO' and cod_con='SD'";
                }

                if (mod.consulta(query).Rows.Count > 0)
                {
                    string con;
                    if (Tipo == "O")
                    {
                        con = mod.consulta(query).Rows[0][0].ToString();
                        if (con.Substring(0, 1) != "S")
                            return con;
                        else
                            return con.Substring(0, 2) + (System.Convert.ToInt64(con.Substring(2)) + 1).ToString("00000");
                    }
                    if (Tipo == "P")
                    {
                        con = mod.consulta(query).Rows[0][0].ToString();
                        return con.Substring(0, 2) + (System.Convert.ToInt64(con.Substring(2)) + 1).ToString("00000");
                    }
                    if (Tipo == "D")
                    {
                        con = mod.consulta(query).Rows[0][0].ToString();
                        return con.Substring(0, 2) + (System.Convert.ToInt64(con.Substring(2)) + 1).ToString("00000");
                    }
                }
                String StrConsecutivo;
                StrConsecutivo = "S" + Tipo + "00000";//FJRF - Ponemos el consecutivo en 0 porq es el primero si no existe.

                #region FJRF - SiLlegoAcaEsPorQueElConsecutivoNoExisteYLoCreamos
                StrConsulta = "Insert into controlp (ID_CON, COD_CON, NOM_CON, DES_CON) Values ('NRO', 'S" + Tipo + "', '" + StrConsecutivo + "', 'SALIDATIPO-" + Tipo + "')";
                mod.comando(StrConsulta.ToUpper());
                #endregion

                return "S" + Tipo + "00001";//FJRF - Ponemos el consecutivo una unidad más de la actual
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public void ActualizarConsecutivo(string Tipo)
        {
            try
            {
                string query="";
                if (Tipo == "O")
                {
                    query = "select nom_con from controlp where id_con='NRO' and cod_con='SO'";
                }
                if (Tipo == "P")
                {
                    query = "select nom_con from controlp where id_con='NRO' and cod_con='SP'";
                }
                if (Tipo == "D")
                {
                    query = "select nom_con from controlp where id_con='NRO' and cod_con='SD'";
                }

                if (mod.consulta(query).Rows.Count > 0)
                {
                    string con;
                    if (Tipo == "O")
                    {
                        con = mod.consulta(query).Rows[0][0].ToString();
                        query = "update controlp set nom_con='" + con.Substring(0, 2) + (System.Convert.ToInt64(con.Substring(2, 5)) + 1).ToString("00000") + "' where id_con='NRO' and cod_con='SO'";
                        mod.comando(query);
                    }
                    if (Tipo == "P")
                    {
                        con = mod.consulta(query).Rows[0][0].ToString();
                        query = "update controlp set nom_con='" + con.Substring(0, 2) + (System.Convert.ToInt64(con.Substring(2, 5)) + 1).ToString("00000") + "' where id_con='NRO' and cod_con='SP'";
                        mod.comando(query);
                    }
                    if (Tipo == "D")
                    {
                        con = mod.consulta(query).Rows[0][0].ToString();
                        query = "update controlp set nom_con='" + con.Substring(0, 2) + (System.Convert.ToInt64(con.Substring(2, 5)) + 1).ToString("00000") + "' where id_con='NRO' and cod_con='SD'";
                        mod.comando(query);
                    }
                }                
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public double ExistenciaMP(string Codigo, string Color)
        {
            try
            {
                string query = "select (eximtp_mtp-cansep_mtp) as eximtp_mtp from maemtp where codmat_mtp='" + Codigo + "' and codcol_mtp='" + Color + "'";
                if (mod.consulta(query).Rows.Count > 0)
                {
                    return System.Convert.ToDouble(mod.consulta(query).Rows[0][0].ToString());
                }
                return 0;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }


        public DataTable ConsultarOrden()
        {
            try
            {
                string query = "select nroord_eop, nomcli_cli, codref_ref,  nomref_ref, codcol_col, nroped_eop from encordp inner join detordp on nroord_eop=nroord_dop inner join maeclip on codcli_eop=codcli_cli inner join maeref on codref_dop=codref_ref inner join maecol on codcol_dop=codcol_col where nroord_eop='" + NROORDP_ESA + "'";
                if (mod.consulta(query).Rows.Count > 0)
                {
                    return mod.consulta(query);
                }
                return mod.consulta(query);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public DataTable Imprimir()
        {
            try
            {
                string query = "SELECT TIPSAL_ESA, HOJNRO_ESA, FECSAL_ESA, OBSSAL_ESA, DESSAL_ESA, NROORDP_ESA, ESTADO_ESA,'' AS NOMPRV_PRV FROM ENCSALP WHERE TIPSAL_ESA='" + TIPSAL_ESA + "' AND HOJNRO_ESA='" + HOJNRO_ESA + "'";
                if (mod.consulta(query).Rows.Count > 0)
                {
                    return mod.consulta(query);
                }
                return mod.consulta(query);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public double CostoMP(string Codigo, string Color)
        {
            try
            {
                string query = "select valor_pmp from premtpp where codmat_pmp='" + Codigo + "' and codcol_pmp='" + Color + "' and codlis_pmp='99'";
                if (mod.consulta(query).Rows.Count > 0)
                {
                    return System.Convert.ToDouble(mod.consulta(query).Rows[0][0].ToString());
                }
                return 0;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public string NombreMP(string Codigo, string Color)
        {
            try
            {
                string query = "select TRIM(nommat_mat) || ' - ' || TRIM(NOMCOL_COL) as descripcion from maemat inner join maemtp on codmat_mat=codmat_mtp inner join maecolp on codcol_mtp=codcol_col where codmat_mtp='" + Codigo + "' and codcol_mtp='" + Color + "'";
                if (mod.consulta(query).Rows.Count > 0)
                {
                    return mod.consulta(query).Rows[0][0].ToString().Trim();
                }
                return "";
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public string ColorMP(string Codigo, string Color)//FJRF - Buscamos el color con los parametros enviados
        {
            try
            {
                string query = "Select trim(nomcol_col) as Color from maemat inner join maemtp on codmat_mat=codmat_mtp inner join maecolp on codcol_mtp=codcol_col where codmat_mtp='" + Codigo + "' and codcol_mtp='" + Color + "'";
                if (mod.consulta(query).Rows.Count > 0)
                {
                    return mod.consulta(query).Rows[0][0].ToString().Trim();
                }
                return "";
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }


        public bool ExisteSalida()
        {
            try
            {
                string query = "Select tipsal_esa from encsalp where tipsal_esa='" + TIPSAL_ESA + "' and hojnro_esa='" + HOJNRO_ESA + "'";
                if (mod.consulta(query).Rows.Count > 0)
                {
                    return true;
                }
                return false;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public DataTable Consultar()
        {
            try
            {
                string query = "select tipsal_esa,hojnro_esa,fecsal_esa,obssal_esa,dessal_esa,nroordp_esa,estado_esa from encsalp where tipsal_esa='" + TIPSAL_ESA + "' and hojnro_esa='" + HOJNRO_ESA + "'";
                DataTable dt = mod.consulta(query);
                if (dt.Rows.Count > 0)
                {
                    TIPSAL_ESA = dt.Rows[0]["tipsal_esa"].ToString();
                    HOJNRO_ESA = dt.Rows[0]["hojnro_esa"].ToString();
                    FECSAL_ESA = System.Convert.ToDateTime(dt.Rows[0]["fecsal_esa"].ToString());
                    OBSSAL_ESA = dt.Rows[0]["obssal_esa"].ToString();
                    DESSAL_ESA = dt.Rows[0]["dessal_esa"].ToString();
                    NROORDP_ESA = dt.Rows[0]["nroordp_esa"].ToString();
                    ESTADO_ESA = dt.Rows[0]["estado_esa"].ToString();
                    EXISTE = true;
                    
                    return dt;
                }
                return dt;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public int Eliminar()
        {
            try
            {
                string query = "update encsalp set estado_esa='A' where tipsal_esa='" + TIPSAL_ESA + "' and hojnro_esa='" + HOJNRO_ESA + "'";
                return mod.comando(query);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public void Grabar(ObservableCollection<RegDetSal> Lista)
        {
            CLSDETSAL DetSal = new CLSDETSAL();
            CLSCONORD ConOrd = new CLSCONORD();
            MDOgeneral.transaccion = MDOgeneral.conexion.BeginTransaction();
            try
            {
                Insertar();
                DetSal.TIPSAL_DSA = TIPSAL_ESA;
                DetSal.HOJNRO_DSA = HOJNRO_ESA;
                DetSal.Eliminar();
                RegDetSal Rg = new RegDetSal();
                CLSMAEMTP MP = new CLSMAEMTP();
                for (int i = 0; i < Lista.Count; i++)
                {
                    Rg = Lista[i];
                    if (Rg.CODIGO_SAL!= "" & Rg.CANT_SAL > 0)
                    {
                        DetSal.TIPSAL_DSA = TIPSAL_ESA;
                        DetSal.HOJNRO_DSA = HOJNRO_ESA;
                        DetSal.CODMAT_DSA = Rg.CODIGO_SAL.Substring(0, 6);
                        DetSal.CODCOL_DSA = Rg.CODIGO_SAL.Substring(6, 4);
                        DetSal.CANPRO_DSA = Rg.CANT_SAL;
                        DetSal.COSPRO_DSA = Rg.COSTO_SAL;
                        DetSal.CANSTN_DSA = 0;
                        DetSal.Insertar();
                        //MP.CODMAT_MTP = DetSal.CODMAT_DSA;
                        //MP.CODCOL_MTP = DetSal.CODCOL_DSA;
                        //MP.CANSEP_MTP = DetSal.CANPRO_DSA;
                        ////MP.RestarSep();
                        //MP.EXIMTP_MTP = Rg.CANT_SAL;
                        ////MP.RestarExi();
                        //ConOrd.NROORD_COR = HOJNRO_ESA;
                        //ConOrd.CODMAT_COR = DetSal.CODMAT_DSA;
                        //ConOrd.CODCOL_COR = DetSal.CODCOL_DSA;
                        //ConOrd.Actualizar();
                    }
                }
                ActualizarConsecutivo(TIPSAL_ESA);
                MDOgeneral.transaccion.Commit();
            }
            catch (Exception ex)
            {
                MDOgeneral.transaccion.Rollback();
                throw ex;
            }
        }

        public int Insertar()
        {
            try
            {
                if(String.IsNullOrEmpty(HOJNRO_ESA) == true)//FJRF - Si no trae datos hacemos lo siguiente
                {
                    HOJNRO_ESA = " ";
                }

                string query = "insert into encsalp (tipsal_esa,hojnro_esa,fecsal_esa,obssal_esa,dessal_esa,nroordp_esa,estado_esa) values ('" + TIPSAL_ESA + "','" + HOJNRO_ESA + "','" + FECSAL_ESA.ToShortDateString() + "','" + OBSSAL_ESA + "','" + DESSAL_ESA + "','" + NROORDP_ESA + "','" + ESTADO_ESA + "')";
                return mod.comando(query);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public int Actualizar()
        {
            try
            {
                string query = "update encsalp set fecsal_esa='" + FECSAL_ESA.ToShortDateString() + "',obssal_esa='" + OBSSAL_ESA + "',dessal_esa='" + DESSAL_ESA + "', nroordp_esa='" + NROORDP_ESA + "',estado_esa='" + ESTADO_ESA + "' where tipsal_esa='" + TIPSAL_ESA + "' and hojnro_esa='" + HOJNRO_ESA + "'";
                return mod.comando(query);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public DataTable Buscar()
        {
            try
            {
                string query = "";
                return mod.consulta(query);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public DataTable DetalleOrden()
        {
            try
            {
                string query = "select nroord_dop,codref_dop,codcol_dop,codtal_dop,canord_dop from detordp where nroord_dop='" + NROORDP_ESA + "'";
                return mod.consulta(query);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }
}
